/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package datos;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import negocio.Cliente;
import negocio.Producto;
import negocio.Usuario;
import negocio.Factura;
import negocio.TipoProducto;
import negocio.DesgloseFactura;

/**
 *
 * @author Esteban
 */
public class Sp_Consultan extends Manejador_BaseDatos
{
     // <editor-fold defaultstate="collapsed" desc="Nombres STORES PROCEDURES">
	private static Sp_Consultan _Instancia;
        
        private String SP_BuscarClienteXTelefono = "PA_BuscarClienteXTelefono(?)";
        private String SP_BuscarClienteXNombre = "PA_BuscarClienteXNombre(?)";
        private String SP_BuscarTiposProducto = "PA_BuscaTipos()";
        private String SP_Login = "PA_Login(?,?)";
        private String SP_VentasDia = "PA_VentasDia()";
        private String SP_DesgloseFactura = "PA_DesgloseFactura(?)";
        private String SP_BuscarProductoXNombre = "PA_BuscarProductoXNombre(?)";
        private String SP_VentasMes = "PA_VentasMes()";
        private String SP_ProductoRepetido = "PA_ProductoRepetido(?)";
        private String SP_RetornaProductos = "PA_RetornarProductos()";
        private String SP_RetornaUltimaFactura = "PA_RetornaUltimaFactura";
        
        
    // </editor-fold>

        private Sp_Consultan(){}
        
         public static Sp_Consultan getInstance()
        {
            if (_Instancia == null)
            {
                _Instancia = new Sp_Consultan();
            }
            return _Instancia;
        }
        
        // <editor-fold defaultstate="collapsed" desc="METODOS ESTEBAN">
        public Vector<Cliente> SP_RetornaClienteXNombre(String nombre)
        {
            Vector<Cliente> Respuesta = new Vector();

            try {

                conectarBaseDatos();
                ResultSet tabla = null; 

                Object[] parametros = new Object[1];

                parametros[0] = new String(nombre);

                tabla = spRetornan(SP_BuscarClienteXNombre, parametros);

                while (tabla.next()) {
                    Cliente cliente = new Cliente();
                    
                    cliente.setIdCliente(tabla.getInt(1));
                    cliente.setNombre(tabla.getString(2));
                    cliente.setApellidos(tabla.getString(3));
                    cliente.setTelefono(tabla.getString(4));
                    cliente.setCorreo(tabla.getString(5));
                    cliente.setDireccion(tabla.getString(6));
                    Respuesta.add(cliente);
                }

                cerrarConexion();

            } catch (SQLException ex) {
                ex.printStackTrace();
            }
           return Respuesta;
        }
         
        public Vector<Cliente> SP_RetornaClienteXTel(String tel)
        {
            Vector<Cliente> Respuesta = new Vector();

            try {

                conectarBaseDatos();
                ResultSet tabla = null; 

                Object[] parametros = new Object[1];

                parametros[0] = new String(tel);

                tabla = spRetornan(SP_BuscarClienteXTelefono, parametros);

                while (tabla.next()) {
                    Cliente cliente = new Cliente();
                    
                    cliente.setIdCliente(tabla.getInt(1));
                    cliente.setNombre(tabla.getString(2));
                    cliente.setApellidos(tabla.getString(3));
                    cliente.setTelefono(tabla.getString(4));
                    cliente.setCorreo(tabla.getString(5));
                    cliente.setDireccion(tabla.getString(6));
                    Respuesta.add(cliente);
                }

                cerrarConexion();

            } catch (SQLException ex) {
                ex.printStackTrace();
            }
           return Respuesta;
        }
        
        public Vector<Factura> SP_RetornaFacturasDiarias()
        {
            Vector<Factura> Respuesta = new Vector();

            try {

                conectarBaseDatos();
                ResultSet tabla = null;

                tabla = spRetornan(SP_VentasDia, null);

                while (tabla.next()) {
                    Factura fac = new Factura();
                    fac.setIdFactura(tabla.getInt(1));
                    fac.setFecha(tabla.getDate(2));
                    fac.setIdCliente(tabla.getInt(3));
                    fac.setTotalFactura(tabla.getInt(4));
                    fac.setTotalPagado(tabla.getInt(5));
                    fac.setVuelto(tabla.getInt(6));
                    Respuesta.add(fac);
                }
            }catch (SQLException ex) {
                ex.printStackTrace();
            }finally{
                return Respuesta;
            }
        }

        public int SP_RetornaVentasMensuales()
        {
            int Respuesta = 0;
            try {
                conectarBaseDatos();
                ResultSet tabla = null;
                tabla = spRetornan(SP_VentasMes, null);

                while (tabla.next()) {
                    Respuesta = tabla.getInt(1);
                }
            }catch (SQLException ex) {
                ex.printStackTrace();
            }finally{
                return Respuesta;
            }
        }
        
        public Vector<DesgloseFactura> SP_DesgloseFactura(int idFactura)
        {
            Vector<DesgloseFactura> Respuesta = new Vector();

            try {

                conectarBaseDatos();
                ResultSet tabla = null;

                Object[] parametros = new Object[1];

                parametros[0] = new Integer(idFactura);
                tabla = spRetornan(SP_DesgloseFactura, parametros);
                

                while (tabla.next()) {
                    DesgloseFactura fac = new DesgloseFactura();
                    fac.setNombre(tabla.getString(1));
                    fac.setPrecio(tabla.getInt(2));
                    fac.setTipo(tabla.getString(3));
                    fac.setCantidad(tabla.getInt(4));
                    fac.setTotal(tabla.getInt(2)*tabla.getInt(4));
                    Respuesta.add(fac);
                }
            }catch (SQLException ex) {
                ex.printStackTrace();
            }finally{
                return Respuesta;
            }
        }
        
         public boolean SP_VerificaLogin(String user, String pass)
        {
            boolean result = false;
            
            try {

                conectarBaseDatos();
                ResultSet tabla = null; 

                Object[] parametros = new Object[2];

                parametros[0] = new String(user);
                parametros[1] = new String (pass);

                tabla = spRetornan(SP_Login, parametros);

                while (tabla.next()) {
                    result = true;
                }        

                cerrarConexion();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }finally{
                
            }
           return result;
       }
         
        // </editor-fold> 
         
        // <editor-fold defaultstate="collapsed" desc="METODOS MENDEZ">
        public Vector<TipoProducto> SP_RetornaTipoProducto()
        {
            Vector<TipoProducto> Respuesta = new Vector();

            try {

                conectarBaseDatos();
                ResultSet tabla = null; 

                tabla = spRetornan(SP_BuscarTiposProducto, null);

                while (tabla.next()) {
                    TipoProducto tipoProducto = new TipoProducto();
                    
                    tipoProducto.setIdTipoProducto(tabla.getInt(1));
                    tipoProducto.setTipo(tabla.getString(2));
                    
                    Respuesta.add(tipoProducto);
                }

                cerrarConexion();

            } catch (SQLException ex) {
                ex.printStackTrace();
            }
           return Respuesta;
        }
         
        public Vector<Producto> SP_RetornaProductoXNombre(String nombre)
        {
            Vector<Producto> Respuesta = new Vector();

            try {

                conectarBaseDatos();
                ResultSet tabla = null; 

                Object[] parametros = new Object[1];

                parametros[0] = nombre;

                tabla = spRetornan(SP_BuscarProductoXNombre, parametros);

                while (tabla.next()) {
                    Producto producto = new Producto();
                    
                    producto.setIdProducto(tabla.getInt(1));
                    producto.setNombre(tabla.getString(2));
                    producto.setPrecio(tabla.getFloat(3));
                    producto.setRutaImagen(tabla.getString(4));
                    producto.setTipoProducto(tabla.getString(5));
                    producto.setDescripcion(tabla.getString(6));
                    Respuesta.add(producto);
                }

                cerrarConexion();

            } catch (SQLException ex) {
                ex.printStackTrace();
            }
           return Respuesta;
        }
        
        public Vector<Producto> SP_RetornaProductos()
        {
            Vector<Producto> Respuesta = new Vector();

            try {

                conectarBaseDatos();
                ResultSet tabla = null; 

                tabla = spRetornan(SP_RetornaProductos, null);

                while (tabla.next()) {
                    Producto producto = new Producto();
                    
                    producto.setIdProducto(tabla.getInt(1));
                    producto.setNombre(tabla.getString(2));
                    producto.setPrecio(tabla.getFloat(3));
                    producto.setRutaImagen(tabla.getString(4));
                    producto.setTipoProducto(tabla.getString(5));
                    producto.setDescripcion(tabla.getString(6));
                    Respuesta.add(producto);
                }

                cerrarConexion();

            } catch (SQLException ex) {
                ex.printStackTrace();
            }
           return Respuesta;
        }
        
        public int SP_RetornarUltimaFactura()
        {
            int Respuesta = 0;
            ResultSet tabla = null;
            try 
            {
                conectarBaseDatos();                
                tabla = spRetornan(SP_RetornaUltimaFactura, null);
                while (tabla.next())
                    Respuesta = tabla.getInt(1);
                cerrarConexion();
            } 
            catch (SQLException ex) 
            {
                ex.printStackTrace();
            }
            return Respuesta;
        }        
                
        public int SP_ProductoRepetido(String nombre)
        {
            int Respuesta = 0;
            ResultSet tabla = null;
            try 
            {
                conectarBaseDatos();
                Object[] parametros = new Object[1];
                parametros[0] = nombre;
                tabla = spRetornan(SP_ProductoRepetido, parametros);
                while (tabla.next())
                    Respuesta = tabla.getInt(1);
                cerrarConexion();
            } 
            catch (SQLException ex) 
            {
                ex.printStackTrace();
            }
            return Respuesta;
        }
        // </editor-fold> 
}
